   import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.dom4j.*;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;

    public class Dom4jWriter {

        public static void main(String[] args) {
            // 调用生成方法
            Dom4jWriter dom4j = new Dom4jWriter();
            dom4j.createXml();
        }

        /**
         * 生成方法
         */
        public void createXml() {
            // 使用DocumentHelper创建Document对象，即整个xml文档
            Document document = DocumentHelper.createDocument();
            document.addDocType("mapper", "-//mybatis.org//DTD Mapper 3.0//EN", "http://mybatis.org/dtd/mybatis-3-mapper.dtd");
            
            //<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
         // document.addDocType("employees", null, "file://E:/Dtds/dom4j.dtd");
            // 这样就向 XML 文档中增加文档类型说明：
            // <!DOCTYPE employees SYSTEM "file://E:/Dtds/dom4j.dtd">
            // 如果文档要使用文档类型定义（DTD）文档验证则必须有 Doctype。
            
            // 创建根节点class 及相应的节点，注意addElement方法的依属关系
            Element classEle = document.addElement("class");
            classEle.addAttribute("namespace", "com.john.hbatis.model.UserMapper");
            Element personEle = classEle.addElement("person") .addComment("").addText("select *  from `user`");
         
			
            Element nameEle = personEle.addElement("name");
            personEle.addAttribute("id", "1");
            nameEle.setText("小明");
            // 设置生成xml内容的格式，换行
            OutputFormat of = OutputFormat.createPrettyPrint();
           // of.setNewlines(true); //设置是否换行
            System.out.println(document.asXML());
            // 设置编码
            of.setEncoding("UTF-8");
            File fileWriter;
            try {
                // 创建文件
                fileWriter = new File("dom4j.xml");
                // dom4j提供的专门的文件写入对象XMLWriter
                XMLWriter xmlWriter = new XMLWriter(
                        new FileOutputStream(fileWriter), of);
                xmlWriter.write(document);
                xmlWriter.flush();
                xmlWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }